/*
 * @Author: 谢子健 1075010289@qq.com
 * @Date: 2024-09-21 17:18:52
 * @LastEditors: 谢子健 1075010289@qq.com
 * @LastEditTime: 2024-09-26 17:20:52
 * @FilePath: \ilink-vue-frontend\src\router\permission.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// 权限控制路由文件
import { isTeacher } from '@/api/login/userLogin';
import Cookies from 'js-cookie';
import router from './index';
// 针对指定路由前缀进行权限控制，其余路由暂时不校验
const whiteListPatterns = [/^\/login/, /^\/register/, /^\/register2/, /^\/$/];
// 重点关注路由,路由从最开头开始写
const teacherFocusList = ['/teacher'];

router.beforeEach(async (to, from, next) => {
  // 白名单直接放行
  const isWhiteListed = whiteListPatterns.some(pattern => pattern.test(to.path));
  // if (whiteList.includes(to.path))
  //   return next();
  if (isWhiteListed)
    return next();

  // 检测是否具有token
  const accessToken = Cookies.get('access_token_lf')
  if (accessToken) {
    // 自定义权限控制
    // 教师端路由拦截，只有教师端用户才能访问
    // 利用正则匹配，匹配前缀是否符合要求
    if (teacherFocusList.some(path => to.path.startsWith(path))) {
      // 获取用户信息
      const isTeacherBool = await isTeacher();
      if (isTeacherBool) {
        return next();
      }
      else {
        // 不允许跳转，保持原来页面
        return next(from.path);
      }
    }
    else {
      // 其他路由放行
      return next();
    }
  }
  else {
    // 重定向到登录页,添加redirectPath参数
    return next(`/login?redirect=${encodeURIComponent(to.path)}`);
  }
});
